1. Field of the Invention
Embodiments of the present invention generally relate to live streaming and, more particularly, to techniques for providing fault tolerance during live streaming.
2. Description of the Related Art
Media players retrieve media content from one or more origin servers that store the media content in small fragments. The media player requests each fragment from an origin server whose location is specified by a Universal Resource Locator (URL) in a manifest file (also referred to herein as a “manifest”), the manifest previously received from the origin server. The manifest describes the different representations and fragments of the media content being retrieved and the sequence in which they are to be played. The media player re-fetches the manifest periodically. The media player requests media fragments. A reverse proxy in turn requests each fragment from one or more origin servers, utilizing 503 failover, and delivers each fragment to the requesting media player. This fault tolerance is a system's ability to keep operating in spite of problems that occur in the system. If a fragment is not available from a first origin server, the fragment is requested from a second origin server. Additionally, once a fragment is determined to be missing at the first origin server, the media player (i.e., client) does not send any future requests for media content to the first origin server. If the list of origin servers from which media content may be retrieved becomes exhausted, playback of the media content stops. Exhausting possible origin servers is likely if the media player (i.e., client) makes decisions regarding retrieval of media content. However, exhausting origin servers may result in a cessation of media content playback when the media content is actually still available at one of the origin servers from which one of the fragments was determined to be missing previously. Therefore, there is a need for a method and apparatus for extending a manifest so as to provide fault tolerance during live streaming in a client agnostic way.